#include "mytablewidget.h"
#include "global.h"

#include <QHeaderView>
#include <QTableWidgetItem>

MyTableWidget::MyTableWidget(QWidget *parent) : QTableWidget(parent)
{

}

void MyTableWidget::createHorizontalHeader(QStringList colLabels)
{
    setColumnCount(colLabels.count());
    setHorizontalHeaderLabels(colLabels);
    return;
}

void MyTableWidget::createVerticalHeader(QStringList rowLabels)
{
    setRowCount(rowLabels.count());
    setVerticalHeaderLabels(rowLabels);
    return;
}

void MyTableWidget::setHorizontalHeaderStyle(QFont headerFont, QString styleSheet, bool headFixed)
{
    // 设置表头字体 大小
    horizontalHeader()->setFont(headerFont);

    // 文字居中
    horizontalHeader()->setDefaultAlignment(Qt::AlignCenter);

    // 样式
    horizontalHeader()->setStyleSheet(styleSheet);

    // 表头加粗
    QFont font =  horizontalHeader()->font();
    font.setBold(true);
    horizontalHeader()->setFont(font);

    // 表头不能移动
    if(true == headFixed){
        horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
        verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
    }

    return;
}

void MyTableWidget::setVerticalHeaderStyle(QFont headerFont, QString styleSheet, bool headFixed)
{
    // 设置表头字体 大小
    verticalHeader()->setFont(headerFont);

    // 文字居中
    verticalHeader()->setDefaultAlignment(Qt::AlignCenter);

    // 样式
    verticalHeader()->setStyleSheet(styleSheet);

    // 表头加粗
    QFont font =  horizontalHeader()->font();
    font.setBold(true);
    verticalHeader()->setFont(font);

    // 表头不能移动
    if(true == headFixed)
        verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);

    return;
}

void MyTableWidget::setTableWidgetStyle(void)
{
    //设定选择行为，按行选择
    setSelectionBehavior(QAbstractItemView::SelectRows);

    // 设定选中背景色
    setStyleSheet(SELETE_ROW_DEFAULT_BACKGROUND_STYLE);

    return;
}

void MyTableWidget::highLighterRow(QString styleSheet, int row)
{
    //设置选中行的背景色
    setStyleSheet(styleSheet);

    //设置要选中高亮的行，这里会触发itemClicked的信号
    selectRow(row);

    return;
}

void MyTableWidget::CancelHighLighterRow(QString styleSheet)
{
    //设置选中行的背景色
    setStyleSheet(styleSheet);

    return;
}

QTableWidgetItem * MyTableWidget::createItem(QString text, int row, int col)
{
    QTableWidgetItem *pItem = item(row, col);
    if(NULL == pItem)
        pItem = new QTableWidgetItem(text, QTableWidgetItem::UserType);
    else
        pItem->setText(text);

    setItem(row, col, pItem);
    return pItem;
}

void MyTableWidget::setItemStyle(QBrush color, QFont itemFont, int row, int col)
{
    QTableWidgetItem *pItem = item(row, col);
    if(NULL == pItem){
        QLOG_WARN() << "NULL == pItem";
        return;
    }

    // 文字居中
    pItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

    // 设置字体颜色
    pItem->setForeground(color);

    // 设置字体格式
    pItem->setFont(itemFont);

    // 不可编辑
    pItem->setFlags(Qt::ItemIsEnabled);

    return;
}

QTableWidgetItem * MyTableWidget::getItemRowAndColFromPos(QPoint pos, int & row, int & col)
{
    QTableWidgetItem *pItem = itemAt(pos);
    if(NULL == pItem){
        QLOG_WARN() << "NULL == pItem";
        return NULL;
    }

    row = pItem->row();
    col = pItem->column();

    return pItem;
}

